// https://acm.hdu.edu.cn/showproblem.php?pid=1276
// 士兵队列训练问题
/**
Sample Input:
2
20
40
Sample Output:
1 7 19
1 19 37
*/
#include<cstdio>
#include<list>
using namespace std;

int main(){
    int T,n;
    list<int> a;
    list<int>::iterator it;
    scanf("%d",&T);
    while(T--){
        scanf("%d",&n);
        a.clear();    // 清空
        int k=2;    // 第一次删除喊“2”的士兵
        for(int i=1;i<=n;i++)
            a.push_back(i);// 存储每个士兵的编号
        while(a.size()>3){
            int cnt=1;    // 计数器
            // for循环表示一轮报数
            for(it=a.begin(); it!=a.end(); ){
                if(cnt++%k==0)    // 删除喊“k”的士兵
                    it=a.erase(it);    //it指向下一个士兵的地址
                else
                    it++;//it指向下一位士兵的地址
            }
            k=(k==2?3:2); 
        }
        // 输出剩下士兵的最初编号，编号之间有一个空格
        for(it=a.begin();it!=a.end();it++){
            if(it!=a.begin()) printf(" "); 
            printf("%d",*it);
        }
        printf("\n");
    }
    return 0;
}
